import { getMemberList, getMemberPower, getPortAccountList } from '@/api/user';
import { PORT_CODE_XFL_STORE } from '@/config/house/platform';
import { HOUSE_PUSH, VIP_MESSAGE } from '@/config/menuId';
import store from '@/store';

/**
 * 权限校验
 * @param {*} menuId 操作id
 * @param {*} times 操作几次  值为0则仅校验
 * @returns
 */
export async function menuHandler(menuId, times = 1) {
  const { content } = await getMemberPower();
  let item = content.rows.find((v) => v.menuId == menuId);

  // 总上限次数
  const totalMax = item.totalNumber + item.totalNumbered;
  // 当日总上限次数
  const dayMax = item.dayNumber + item.dayNumbered;
  switch (Number(item.statue)) {
    // 正常会员
    case 0:
      if (times === 0) return Promise.resolve();

      // 总次数不够
      if (item.totalVerify && item.totalNumber < times) {
        this.$confirm(
          `${VIP_MESSAGE[menuId]}功能总使用上限为${totalMax}次，${
            times == 1 ? '您已达使用次数上限' : '剩余可用次数不够' + times + '次'
          }`,
          '系统提示',
          { confirmButtonText: '我知道了', showCancelButton: false, type: 'warning' },
        );

        return Promise.reject();
      }

      // 当日次数不够
      if (item.dayVerify && item.dayNumber < times) {
        this.$confirm(
          `${VIP_MESSAGE[menuId]}功能当天使用上限为${dayMax}次，${
            times == 1 ? '您已达当天使用次数上限' : '当天可用次数不足' + times + '次'
          }`,
          '系统提示',
          { confirmButtonText: '我知道了', showCancelButton: false, type: 'warning' },
        );

        return Promise.reject();
      }

      // 正常使用
      return Promise.resolve();
      break;

    // 会员已禁用
    case 1:
      forbiddenFn.call(this)

      return Promise.reject();

      break;

    // 会员过期
    case 2:
    // 普通用户
    case 3:
      let _title = Number(item.statue) == 2 ? '续费' : '开通';

      if (times === 0) {
        return Promise.reject(
          this.$confirm(`${VIP_MESSAGE[menuId]}功能为会员专属功能，${_title}会员即可立即使用`, '系统提示', {
            confirmButtonText: `立即${_title}`,
            cancelButtonText: '残忍放弃',
            type: 'warning',
          }).then(() => {
            if (this && this.$router) {
              this.$router.push({ name: 'vipDetails' });
            }
          }),
        );
      }

      // 总次数不够
      if (item.totalVerify && item.totalNumber < times) {
        return Promise.reject(
          this.$confirm(
            `${VIP_MESSAGE[menuId]}功能为会员专属功能，您已经使用${item.totalNumbered}次，还剩余${item.totalNumber}次，${_title}会员即可立即使用`,
            '系统提示',
            {
              confirmButtonText: `立即${_title}`,
              cancelButtonText: '残忍放弃',
              type: 'warning',
            },
          ).then(() => {
            if (this && this.$router) {
              this.$router.push({ name: 'vipDetails' });
            }
          }),
        );
      }

      // 当日次数不够
      if (item.dayVerify && item.dayNumber < times) {
        return Promise.reject(
          this.$confirm(
            `${VIP_MESSAGE[menuId]}功能为会员专属功能，您当天已经使用${item.dayNumbered}次，当天还剩余${item.dayNumber}次，${_title}会员即可立即使用`,
            '系统提示',
            {
              confirmButtonText: `立即${_title}`,
              cancelButtonText: '残忍放弃',
              type: 'warning',
            },
          ).then(() => {
            if (this && this.$router) {
              this.$router.push({ name: 'vipDetails' });
            }
          }),
        );
      }

      // 不用校验
      if (!item.dayVerify && !item.totalVerify) {
        return Promise.resolve();
      }

      // 可以使用
      const h = this.$createElement;
      return this.$msgbox({
        title: '系统提示',
        message: h('div', null, [
          h(
            'p',
            null,
            `${VIP_MESSAGE[menuId]}功能为会员专属功能，您${item.dayVerify ? '当天': ''}已经使用${item.dayNumbered}次，${item.dayVerify ? '当天': ''}还剩余${item.dayNumber}次，是否确认使用？`,
          ),
          h(
            'p',
            {
              style: 'text-align: right; color: #1890ff; cursor: pointer; text-decoration:underline;',
              on: {
                click: () => {
                  this.$router.push({ name: 'vipDetails' });
                  this.$msgbox.close();
                },
              },
            },
            `去${_title}会员任性使用`,
          ),
        ]),
        showCancelButton: true,
        confirmButtonText: '确定',
        cancelButtonText: '取消',
      });

      break;
  }
}

/** 
 * vip用户即可使用的校验
 */
export async function vipCheckHandler(menuId) {
  const { content } = await getMemberList({
    currentPage: 1,
    pageSize: 1,
    t: {
      memberAgentId: store.state.user.sessionUser.id,
    },
  })
  const { statue } = content
  switch (Number(statue)) {
    case 0:
      return Promise.resolve()
      break;
    case 1:
      forbiddenFn.call(this)
      return Promise.reject()
      break;
    case 2:
    case 3:
      let _title = Number(statue) == 2 ? '续费' : '开通';

      return Promise.reject(
        this.$confirm(
          `${VIP_MESSAGE[menuId]}功能为会员专属功能，${_title}会员即可立即使用`,
          '系统提示',
          {
            confirmButtonText: `立即${_title}`,
            cancelButtonText: '残忍放弃',
            type: 'warning',
          },
        ).then(() => {
          if (this.$router) {
            this.$router.push({ name: 'vipDetails' });
          }
        }),
      );
      break;
    
  }
}

function forbiddenFn() {
  this.$confirm('您的会员已被禁用，请联系客服解禁', '系统提示', {
    confirmButtonText: '我知道了',
    cancelButtonText: '联系客服',
    type: 'warning',
  }).catch(() => {
    this.$confirm(customerHTML, '系统提示', {
      dangerouslyUseHTMLString: true,
      center: true,
      confirmButtonText: '去了解会员',
      cancelButtonText: '取消',
    })
      .then(() => {
        if (this.$router) {
          this.$router.push({ name: 'vipDetails' });
        }
      })
      .catch(() => {});
  });
}


/** 可发端口账号 */
export let pushAccounts = [];
export let portStatusCode = -1;

// 获取可发端口账号(排除幸福里门店版)
async function getPushAbleAccounts() {
  // 使用本地缓存的数据
  if (portStatusCode != -1) {
    if (pushAccounts.length) {
      return pushAccounts
    } else {
      return portStatusCode
    }
  }
  const { content } = await getPortAccountList();

  // 测试 -----------------
  // content.length = 0
  // content[0].comboIsBuy = 0
  // content[1].comboIsBuy = 0
  // content.push({
  //   comboIsBuy: 0,
  //   combo: "无套餐",
  //   portType: "XFL_MP",
  //   portUserCity: "上海",
  //   status: "1",
  // })
  // -------------------------

  const accounts = content || [];

  // 可发账号
  pushAccounts = accounts.filter((item) => {
    return item.status == 1 && item.portType != PORT_CODE_XFL_STORE;
  });
  if (pushAccounts.length) {
    portStatusCode = 1;
    return pushAccounts;
  } else {
    const accountItem = accounts[0];
    portStatusCode = 0
    if (accountItem) {
      let errors = {
        'account_login.check_mobile': 2,
        'account_login.name_or_pass_fail': 3,
      };
      portStatusCode = errors[accountItem.statusCode] || portStatusCode;
    }

    return portStatusCode;
  }
}

/**
 * 检测是否有绑定成功的平台账号(用于发房的)
 *  */
export async function checkPortAccountHandler() {
  const accounts = await getPushAbleAccounts();
  if (Array.isArray(accounts)) {
    return Promise.resolve(accounts);
  } else {
    return Promise.reject(accounts);
  }
}

/**
 * 通过端口code检查是否绑定
 *  */
export async function checkPortBindByCode(code, isCheckStatus = false) {
  if (!code) return false;
  const res = await getPortAccountList();
  let isBind = false;
  if (res && res.content && res.content.length) {
    res.content.forEach((element) => {
      if (element.portType === code) {
        if (isCheckStatus) {
          isBind = element.status === '1' ? true : false;
        } else {
          isBind = true;
        }
      }
    });
  }
  return isBind
}

/** 获取可发端口名称 */
export async function getPushAblePortList() {
  const accounts = await getPushAbleAccounts();
  if (Array.isArray(accounts)) {
    return accounts.map((v) => v.portType);
  } else {
    return [];
  }
}

/** 重置端口信息 */
export function resetPortStatus() {
  portStatusCode = -1
}

export const customerHTML = `<div style="text-align: center;">
<p>扫描二维码联系客服~</p>
<img style="width:250px;height:250px" src="${require('@/assets/images/qr.jpg')}" />
</div>`;
